home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Mega Archive 1
/
Atari Mega Archive - Volume 1.iso
/
gnu
/
emacs
/
emacs1857
/
bin_d2.zoo
/
lisp
/
tex-mode.el
< prev
next >
Wrap
Lisp/Scheme
|
1991-12-02
|
17KB
|
466 lines
;; TeX mode commands.
;; Copyright (C) 1985, 1986 Free Software Foundation, Inc.
;; Rewritten following contributions by William F. Schelter
;; and Dick King (king@kestrel).
;; Modified August 1986 by Stephen Gildea <mit-erl!gildea> and
;; Michael Prange <mit-erl!prange> to add LaTeX support and enhance
;; TeX-region.
;; Added TeX-directory and reorganized somewhat gildea 21 Nov 86
;; This file is part of GNU Emacs.
;; GNU Emacs is free software; you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation; either version 1, or (at your option)
;; any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs; see the file COPYING. If not, write to
;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
;; Still to do:
;; Make TAB indent correctly for TeX code. Then we can make linefeed
;; do something more useful.
;;
;; Have spell understand TeX instead of assuming the entire world
;; uses nroff.
;;
;; The code for finding matching $ needs to be fixed.
(provide 'tex-mode)
(defvar TeX-directory "/tmp/"
"*Directory in which to run TeX subjob. Temporary files are
created in this directory.")
(defvar TeX-dvi-print-command "lpr -d"
"*Command string used by \\[TeX-print] to print a .dvi file.")
(defvar TeX-show-queue-command "lpq"
"*Command string used by \\[TeX-show-print-queue] to show the print queue
that \\[TeX-print] put your job on.")
(defvar TeX-default-mode 'plain-TeX-mode
"*Mode to enter for a new file when it can't be determined whether
the file is plain TeX or LaTeX or what.")
(defvar TeX-command nil
"The command to run TeX on a file. The name of the file will be appended
to this string, separated by a space.")
(defvar TeX-trailer nil
"String appended after the end of a region sent to TeX by \\[TeX-region].")
(defvar TeX-start-of-header nil
"String used by \\[TeX-region] to delimit the start of the file's header.")
(defvar TeX-end-of-header nil
"String used by \\[TeX-region] to delimit the end of the file's header.")
(defvar TeX-shell-cd-command "cd"
"Command to give to shell running TeX to change directory. The value of
TeX-directory will be appended to this, separated by a space.")
(defvar TeX-zap-file nil
"Temporary file name used for text being sent as input to TeX.
Should be a simple file name with no extension or directory specification.")
(defvar TeX-mode-syntax-table nil
"Syntax table used while in TeX mode.")
(defun TeX-define-common-keys (keymap)
"Define the keys that we want defined both in TeX-mode
and in the TeX-shell."
(define-key keymap "\C-c\C-k" 'TeX-kill-job)
(define-key keymap "\C-c\C-l" 'TeX-recenter-output-buffer)
(define-key keymap "\C-c\C-q" 'TeX-show-print-queue)
(define-key keymap "\C-c\C-p" 'TeX-print)
)
(defvar TeX-mode-map nil "Keymap for TeX mode")
(if TeX-mode-map
nil
(setq TeX-mode-map (make-sparse-keymap))
(TeX-define-common-keys TeX-mode-map)
(define-key TeX-mode-map "\"" 'TeX-insert-quote)
(define-key TeX-mode-map "\n" 'TeX-terminate-paragraph)
(define-key TeX-mode-map "\e}" 'up-list)
(define-key TeX-mode-map "\e{" 'TeX-insert-braces)
(define-key TeX-mode-map "\C-c\C-r" 'TeX-region)
(define-key TeX-mode-map "\C-c\C-b" 'TeX-buffer)
(define-key TeX-mode-map "\C-c\C-f" 'TeX-close-LaTeX-block)
)
(defvar TeX-shell-map nil
"Keymap for the TeX shell. A shell-mode-map with a few additions")
;(fset 'TeX-mode 'tex-mode) ;in loaddefs.
;;; This would be a lot simpler if we just used a regexp search,
;;; but then it would be too slow.
(defun tex-mode ()
"Major mode for editing files of input for TeX or LaTeX.
Trys to intuit whether this file is for plain TeX or LaTeX and
calls plain-tex-mode or latex-mode. If it cannot be determined
\(e.g., there are no commands in the file), the value of
TeX-default-mode is used."
(interactive)
(let (mode slash comment)
(save-excursion
(goto-char (point-min))
(while (and (setq slash (search-forward "\\" nil t))
(setq comment (let ((search-end (point)))
(save-excursion
(beginning-of-line)
(search-forward "%" search-end t))))))
(if (and slash (not comment))
(setq mode (if (looking-at "documentstyle")
'latex-mode
'plain-tex-mode))))
(if mode (funcall mode)
(funcall TeX-default-mode))))
(fset 'plain-TeX-mode 'plain-tex-mode)
(fset 'LaTeX-mode 'latex-mode)
(defun plain-tex-mode ()
"Major mode for editing files of input for plain TeX.
Makes $ and } display the characters they match.
Makes \" insert `` when it seems to be the beginning of a quotation,
and '' when it appears to be the end; it inserts \" only after a \\.
Use \\[TeX-region] to run TeX on the current region, plus a \"header\"
copied from the top of the file (containing macro definitions, etc.),
running TeX under a special subshell. \\[TeX-buffer] does the whole buffer.
\\[TeX-print] prints the .dvi file made by either of these.
Use \\[validate-TeX-buffer] to check buffer for paragraphs containing
mismatched $'s or braces.
Special commands:
\\{TeX-mode-map}
Mode variables:
TeX-directory
Directory in which to create temporary files for TeX jobs
run by \\[TeX-region] or \\[TeX-buffer].
TeX-dvi-print-command
Command string used by \\[TeX-print] to print a .dvi file.
TeX-show-queue-command
Command string used by \\[TeX-show-print-queue] to show the print
queue that \\[TeX-print] put your job on.
Entering plain-TeX mode calls the value of text-mode-hook,
then the value of TeX-mode-hook, and then the value
of plain-TeX-mode-hook."
(interactive)
(TeX-common-initialization)
(setq mode-name "TeX")
(setq major-mode 'plain-TeX-mode)
(setq TeX-command "tex")
(setq TeX-start-of-header "%**start of header")
(setq TeX-end-of-header "%**end of header")
(setq TeX-trailer "\\bye\n")
(run-hooks 'text-mode-hook 'TeX-mode-hook 'plain-TeX-mode-hook))
(defun latex-mode ()
"Major mode for editing files of input for LaTeX.
Makes $ and } display the characters they match.
Makes \" insert `` when it seems to be the beginning of a quotation,
and '' when it appears to be the end; it inserts \" only after a \\.
Use \\[TeX-region] to run LaTeX on the current region, plus the preamble
copied from the top of the file (containing \\documentstyle, etc.),
running LaTeX under a special subshell. \\[TeX-buffer] does the whole buffer.
\\[TeX-print] prints the .dvi file made by either of these.
Use \\[validate-TeX-buffer] to check buffer for paragraphs containing
mismatched $'s or braces.
Special commands:
\\{TeX-mode-map}
Mode variables:
TeX-directory
Directory in which to create temporary files for TeX jobs
run by \\[TeX-region] or \\[TeX-buffer].
TeX-dvi-print-command
Command string used by \\[TeX-print] to print a .dvi file.
TeX-show-queue-command
Command string used by \\[TeX-show-print-queue] to show the print
queue that \\[TeX-print] put your job on.
Entering LaTeX mode calls the value of text-mode-hook,
then the value of TeX-mode-hook, and then the value
of LaTeX-mode-hook."
(interactive)
(TeX-common-initialization)
(setq mode-name "LaTeX")
(setq major-mode 'LaTeX-mode)
(setq TeX-command "latex")
(setq TeX-start-of-header "\\documentstyle")
(setq TeX-end-of-header "\\begin{document}")
(setq TeX-trailer "\\end{document}\n")
(run-hooks 'text-mode-hook 'TeX-mode-hook 'LaTeX-mode-hook))
(defun TeX-common-initialization ()
(kill-all-local-variables)
(use-local-map TeX-mode-map)
(setq local-abbrev-table text-mode-abbrev-table)
(if (null TeX-mode-syntax-table)
(progn
(setq TeX-mode-syntax-table (make-syntax-table))
(set-syntax-table TeX-mode-syntax-table)
(modify-syntax-entry ?\\ ".")
(modify-syntax-entry ?\f ">")
(modify-syntax-entry ?\n ">")
(modify-syntax-entry ?$ "$$")
(modify-syntax-entry ?% "<")
(modify-syntax-entry